package com.springcloud3.lambda;


import java.util.ArrayList;
import java.util.Collections;


public class Test1 {
    //函数式接口:只要是函数性接口就可以用lambda表达式简化
    //函数式接口:接口中只有一个未实现的方法,这个接口就叫函数式接口
    //@FunctionalInterface检查是否是函数接口
    @FunctionalInterface
    interface  MyInterface{
        int sum(int a, int b);
    }
  //1.自己写实现类
    class MyInterfaceImpl implements MyInterface{
     public int sum(int a, int b){
         return a+b;
     }
  }
    public static void main(String[] args) {
//2.创建匿名实现类
        //冗余写法
        MyInterface myInterface = new MyInterface() {
            @Override
            public int sum(int a, int b) {
                return a * a + b * b;
            }
        };
        System.out.println(myInterface.sum(3, 4));
//3.lambda表达式 参数列表+箭头+方法体
        MyInterface myInterface2 = (int a, int b) -> {
            return a * a + b * b;
        };
        System.out.println(myInterface2.sum(3, 4));
//简化写法只写参数类型不写,只写参数名
        MyInterface myInterface3 = (a, b) -> {
            return a * a + b * b;
        };
        System.out.println(myInterface3.sum(3, 4));

        //1.最小参数:一个参数名,或者()
        //2.方式体只有一句话{}可以省略
//3.以上lambada表达式简化了实例的创建
        ArrayList<String> list = new ArrayList<String>();
        list.add("fafa");
        list.add("bba");
        list.add("cccc");
        Collections.sort(list, (String o1, String o2) -> {
            return o1.compareTo(o2);
        });
        System.out.println(list);
        //类::方法 引用类中的实例方法,忽略lambada写法
        Collections.sort(list, String::compareTo);
        System.out.println(list);
        new Thread(() -> System.out.println("hahaaha")).start();


    }
}
